package cn.coufran.springboot.starter.http;

import java.nio.charset.Charset;

public class ContentType {
    private MediaType mediaType;
    private Charset charset;

    private ContentType(MediaType mediaType, Charset charset) {
        this.mediaType = mediaType;
        this.charset = charset;
    }

    MediaType getMediaType() {
        return mediaType;
    }

    Charset getCharset() {
        return charset;
    }

    @Override
    public String toString() {
        String str = mediaType.toString();
        if (charset != null) {
            str += "; charset=" + charset.name();
        }
        return str;
    }

    String toString(String boundary) {
        return this.toString() + "; boundary=" + boundary;
    }

    public static ContentType of(String contentType) {
        int index = contentType.indexOf(";");
        if (index > 0) {
            String mediaType = contentType.substring(0, index);
            String charset = contentType.substring(index + 9).trim(); // charset=UTF-8
            return new ContentType(MediaType.of(mediaType), Charset.forName(charset));
        } else {
            return new ContentType(MediaType.of(contentType), null);
        }
    }

    public static ContentType of(MediaType mediaType, Charset charset) {
        return new ContentType(mediaType, charset);
    }

    public static ContentType of(MediaType mediaType) {
        return new ContentType(mediaType, null);
    }
}
